/**
 * @file app_device.h
 * @author your name (you@domain.com)
 * @brief 这个程序是通过串口读取蓝牙模块接收到的下行设备发来的数据
 *        在Linux里面，一切皆文件，so 串口也是文件
 *        操作跟文件一样：open（“uart”） read("uart") write("uart") close("uart")
 * @version 0.1
 * @date 2025-04-11
 *
 * @copyright Copyright (c) 2025
 *
 */

#ifndef __APP_DEVICE_H__
#define __APP_DEVICE_H__

#include "app_common.h"
#include "stdlib.h"
#include "stdio.h"
#include "app_buffer.h"

typedef struct
{
    char *filename; /* 设备文件名*/
    int fd;         /* 文件标识符 */

    Buffer *up_buffer;   /* 上行缓冲区 */
    Buffer *down_buffer; /* 下行缓冲区 */

    int is_running; /* 设备是否运行 */

    pthread_t read_threadID; /* 存取线程的唯一ID，读取串口数据线程（接收下行设备通过蓝牙发来的数据） */

    int (*post_read)(char *data, int date_len); /* 串口从蓝牙读取到下行设备数据之后的回调函数  */

    int (*pre_write)(char *data, int date_len); /* 通过mqtt从上行设备接收到数据的回调函数，也就是将数据写到串口之前的处理函数  */

    long last_write_time;

} Device;

Device *app_device_init(char *filename);

returnType_t app_device_start(Device *device);

returnType_t app_device_stop(Device *device);

#endif /* __APP_DEVICE_H__ */